package com.study.singleton;

/**
 * 内部类饿汉式单例模式
 */
public class InnerClassSingletonTest {
    public static void main(String[] args) {

    }
}


/**
 * 用内部类的方式这样做有什么好处？
 * 访问str的时候只会调用到InnerClassSingleton的静态代码块不会去触发SingletonHolder的静态代码块，代表此时SingletonHolder还没被初始化
 * 只有当调用getInstance才会去初始化SingletonHolder
 * 这样做的好处是可以延迟加载SingletonHolder类
 */
class InnerClassSingleton{

    private static String str = "aa";

    static {
        System.out.println("InnerClassSingleton");
    }

    //避免外面new
    private InnerClassSingleton(){
    }

    private static class SingletonHolder{
        static {
            System.out.println("SingletonHolder");
        }
        private static InnerClassSingleton instance = new InnerClassSingleton();
    }

    public static InnerClassSingleton getInstance(){
        return SingletonHolder.instance;
    }


}